package com.chuanjiabao.wisdom.util;

import com.chuanjiabao.wisdom.bean.Constants;
import com.lzy.okgo.OkGo;
import com.lzy.okgo.callback.FileCallback;
import com.lzy.okgo.callback.StringCallback;

import java.io.File;

import static com.lzy.okgo.OkGo.get;
import static com.lzy.okgo.OkGo.post;

public class HTTPAPI {

    private static HTTPAPI instance;

    public static HTTPAPI getInstance() {
        if (instance == null) {
            instance = new HTTPAPI();
        }
        return instance;
    }

    /**
     * 登陆
     *
     * @param phone    手机
     * @param code     验证码
     * @param callback 联网回掉
     */
    public void login(String phone, String code, StringCallback callback) {
        OkGo.post(Constants.URL_POST_LOGIN)
                .params("p", "1")
                .params("nump", "9")
                .params("mobile", phone)
                .params("code", code)
                .execute(callback);
    }

    /**
     * 退出
     */
    public void getLoginOut(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.get(Constants.URL_GET_LOGINOUT)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 注销
     */
    public void getCancelOut(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.get(Constants.URL_GET_CANCEL)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 广告
     */
    public void getMedia(StringCallback callback) {
        OkGo.get(Constants.URL_GET_MEDIA)
                .tag(this)
                .connTimeOut(30000)
                .execute(callback);
    }

    /**
     * 版本更新
     */
    public void getUpdate(StringCallback callback) {
        OkGo.get(Constants.URL_GET_UPDATE)
                .tag(this)
                .connTimeOut(30000)
                .execute(callback);
    }

    /**
     * 验证码
     *
     * @param phone    手机
     * @param callback 联网回掉
     */
    public void getCode(String phone, StringCallback callback) {
        OkGo.post(Constants.URL_POST_SMS)
                .params("mobile", phone)
                .execute(callback);
    }

    /**
     * 验证码
     *
     * @param phone    手机
     * @param callback 联网回掉
     */
    public void getLoginCode(String phone, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.post(Constants.URL_POST_SMS)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("mobile", phone)
                .execute(callback);
    }

    /**
     * 修改手机号
     */
    public void changeMobile(String phone, String code, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.post(Constants.URL_POST_MOBILE_CHANGE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("mobile", phone)
                .params("code", code)
                .execute(callback);
    }

    /**
     * 获取STS
     */
    public void getSTS(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.get(Constants.ULR_GET_TEST)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 获取上传权限
     *
     * @param type     1代表家上传 2代表个人私密上传
     * @param id       家id                            家上传时需要传入家ID
     * @param callback 回调
     */
    public void updataImg(String type, String id, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.post(Constants.ULR_POST_UPDATA)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("type", type)
                .params("id", id)
                .execute(callback);
    }

    /**
     * 获取家的详情
     */
    public void getFamilyDetail(String id, StringCallback callback) {
        String homeId = SpResourceUtil.getHomeId();
        String token = SpResourceUtil.getToken();
        OkGo.post(Constants.URL_POST_FAMILY_DETAIL)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("id", homeId)
                .execute(callback);
    }

    /**
     * 创建家
     */
    public void getHomeCreate(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.get(Constants.URL_POST_HOME_CREATE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 退出家
     */
    public void getHomeExit(String id, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.get(Constants.URL_GET_HOMT_EXIT)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("home_id", id)
                .execute(callback);
    }

    /**
     * 获取家列表
     */
    public void getHomeList(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.post(Constants.URL_GET_HOMT_LIST)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 修改/提交个人信息
     *
     * @param sex           性别
     * @param birthday      生日
     * @param birthday_type 生日类型
     * @param truename      昵称
     * @param province      省
     * @param city          市
     * @param district      区
     * @param address       地址
     * @param avatar        头像
     * @param callback      回调
     */
    public void udpateUserInfo(
            String sex,
            String birthday,
            String birthday_type,
            String truename,
            String province,
            String city,
            String district,
            String address,
            String avatar,
            StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.post(Constants.URL_POST_USERINFO_CHANGE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("sex", sex)
                .params("birthday", birthday)
                .params("birthday_type", birthday_type)
                .params("truename", truename)
                .params("province", province)
                .params("city", city)
                .params("district", district)
                .params("address", address)
                .params("avatar", avatar)
                .execute(callback);
    }


    /**
     * 获取个人信息
     *
     * @param callback 回调
     */
    public void getUserInfo(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.get(Constants.URL_GET_USERINFO_CHANGE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }


    /**
     * 创建家庭成员
     *
     * @param d_relation      关系
     * @param d_position_x    关系坐标x轴
     * @param d_position_y    关系坐标y轴
     * @param d_home_id       家id
     * @param d_birthday_type 阴历还是阳历
     * @param d_head_pic      头像地址
     * @param d_birthday_str  生日str
     * @param d_name          姓名
     * @param d_birthday      生日时间戳
     * @param d_alive         1在世 2离世
     * @param d_phone         电话
     * @param d_sex           性别 1男 2女 0未选择
     * @param d_pic_upload    是否允许上传权限  0 没有  1 有
     * @param callback        回调
     */
    public void postHomeCreateUser(
            String d_relation, String d_position_x, String d_position_y,
            String d_home_id, String d_birthday_type, String d_head_pic,
            String d_birthday_str, String d_name, String d_birthday,
            String d_alive, String d_phone, String d_sex, String d_pic_upload,
            StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.post(Constants.URL_POST_HOME_CREATER)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("d_relation", d_relation)
                .params("d_relation", d_relation)
                .params("d_position_x", d_position_x)
                .params("d_position_y", d_position_y)
                .params("d_home_id", d_home_id)
                .params("d_birthday_type", d_birthday_type)
                .params("d_head_pic", d_head_pic)
                .params("d_birthday_str", d_birthday_str)
                .params("d_name", d_name)
                .params("d_birthday", d_birthday)
                .params("d_alive", d_alive)
                .params("d_phone", d_phone)
                .params("d_sex", d_sex)
                .params("d_pic_upload", d_pic_upload)
                .execute(callback);
    }

    /**
     * 编辑家庭成员
     *
     * @param d_id            成员ID
     * @param d_relation      关系
     * @param d_position_x    关系坐标x轴
     * @param d_position_y    关系坐标y轴
     * @param d_home_id       家id
     * @param d_birthday_type 阴历还是阳历
     * @param d_head_pic      头像地址
     * @param d_birthday_str  生日字符串
     * @param d_name          姓名
     * @param d_birthday      生日时间戳
     * @param d_alive         1在世 2离世
     * @param d_phone         电话
     * @param d_sex           性别 1男 2女 0未选择
     * @param d_pic_upload    是否允许上传权限  0 没有  1 有
     * @param callback        回调
     */
    public void postHomeEditor(
            String d_id,
            String d_relation,
            String d_position_x,
            String d_position_y,
            String d_home_id,
            String d_birthday_type,
            String d_head_pic,
            String d_birthday_str,
            String d_name,
            String d_birthday,
            String d_alive,
            String d_phone,
            String d_sex,
            String d_pic_upload,
            StringCallback callback) {
        String token = SpResourceUtil.getToken();
        OkGo.post(Constants.URL_POST_HOME_EDITUSER)
                .tag(this)
                .isMultipart(true)
                .connTimeOut(30000)
                .headers("token", token)
                .params("d_relation", d_relation)
                .params("d_id", d_id)
                .params("d_position_x", d_position_x)
                .params("d_position_y", d_position_y)
                .params("d_home_id", d_home_id)
                .params("d_birthday_type", d_birthday_type)
                .params("d_head_pic", d_head_pic)
                .params("d_birthday_str", d_birthday_str)
                .params("d_name", d_name)
                .params("d_birthday", d_birthday)
                .params("d_alive", d_alive)
                .params("d_phone", d_phone)
                .params("d_sex", d_sex)
                .params("d_pic_upload", d_pic_upload)
                .execute(callback);
    }

    /**
     * 微信登录
     *
     * @param code     微信登录返回的code
     * @param callback 联网返回值
     */
    public void getWXOppenId(String code, StringCallback callback) {
        try {
            get(Constants.URL_WX_GET_OPPENID)
                    .tag(this)
                    .connTimeOut(30000)
                    .params("appid", Constants.WX_PAY_APPID)
                    .params("secret", Constants.WX_PAY_SECRET)
                    .params("code", code)
                    .params("grant_type", "authorization_code")
                    .execute(callback);
        } catch (Exception e) {
            ToastUtil.showLongToast("联网出错");
        }
    }


    /**
     * 微信绑定
     *
     * @param unionid  unionid
     * @param openid   openid
     * @param mobile   手机号
     * @param code     code
     * @param callback 回调
     */
    public void wxBand(String unionid, String openid, String mobile, String code, StringCallback callback) {
        OkGo.post(Constants.URL_POSST_WX_BAND)
                .tag(this)
                .connTimeOut(30000)
                .params("unionid", unionid)
                .params("openid", openid)
                .params("mobile", mobile)
                .params("code", code)
                .execute(callback);
    }

    /**
     * 获取个人信息
     *
     * @param token    token
     * @param callback 回调
     */
    public void getUserInfo(String token, StringCallback callback) {
        get(Constants.URL_GET_USER_INFO)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 根据家ID和个人ID获取对应的信息
     *
     * @param id       家id
     * @param u_id     对应成员id
     * @param type     类型1 图片 2视频 4文本
     * @param callback 回调
     */
    public void getFamilyUserInfo(String p, String id, String u_id, String type, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_FAMILY_USER_INFO)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("id", id)
                .params("u_id", u_id)
                .params("type", type)
                .params("p", p)
                .params("nump", "21")
                .execute(callback);
    }

    /**
     * 设置私密密码
     *
     * @param idcard     身份证
     * @param password   密码
     * @param repassword 重复密码
     * @param callback   回调
     */
    public void setSecretPwd(String idcard, String password, String repassword, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_SECRET_PWD)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("idcard", idcard)
                .params("password", password)
                .params("repassword", repassword)
                .execute(callback);
    }

    /**
     * 重置私密密码
     *
     * @param idcard     身份证信息后六位
     * @param password   密码
     * @param repassword 新密码
     * @param callback   回调
     */
    public void resetSecretPwd(String idcard, String password, String repassword, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_RESET_SECRET_PWDD)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("idcard", idcard)
                .params("password", password)
                .params("repassword", repassword)
                .execute(callback);
    }

    /**
     * 修改私密密码
     *
     * @param old        原密码
     * @param password   密码
     * @param repassword 新密码
     * @param callback   回调
     */
    public void changeSecretPwd(String old, String password, String repassword, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_SET_SECRET_PWDD)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("oldpassword", old)
                .params("newpassword", password)
                .params("confirmpassword", repassword)
                .execute(callback);
    }

    /**
     * 校验身份证号
     *
     * @param card 后六位
     * @param callback   回调
     */
    public void checkIDCard(String card, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_ID_CHECK)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("idcard", card)
                .execute(callback);
    }

    /**
     * 获取私密授权
     *
     * @param callback 回调
     */
    public void getAuth(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_AUTH)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 私密密码认证
     *
     * @param pwd      密码
     * @param callback 回调
     */
    public void authRenzheng(String pwd, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_AUTH_RENZHENG)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("password", pwd)
                .execute(callback);
    }

    /**
     * 获取私密文件
     *
     * @param type     1 图片  2 视频
     * @param callback 回调
     */
    public void getSecretFiles(String p, String type, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_SECRET_FILES)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("type", type)
                .params("p", p)
                .params("nump", "21")
                .execute(callback);
    }

    /**
     * 上传个人头像
     *
     * @param file     文件
     * @param callback 回调
     */
    public void updateHead(File file, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_UPDATE_HEAD)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("file", file)
                .execute(callback);
    }

    /**
     * 添加文章
     *
     * @param home_id  家ID
     * @param content  文章内容
     * @param relation 关联某人，多人用,隔开
     * @param callback 回调
     */
    public void addText(String home_id, String content, String relation, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_ADD_TEXT)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("home_id", home_id)
                .params("content", content)
                .params("relation", relation)
                .execute(callback);
    }

    /**
     * 提交设备ID
     *
     * @param device_id       设备号ID
     * @param registration_id 极光推送注册ID
     * @param callback        回调
     */
    public void updateRegisationID(String device_id, String registration_id, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_UPDATE_PHONEID)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("device_id", device_id)
                .params("registration_id", registration_id)
                .execute(callback);
    }

    /**
     * 设置密码模式
     *
     * @param p        密码
     * @param callback 回调
     */
    public void setSerection(String p, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_SET_SECRETION)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("p", p)
                .params("nump", "9")
                .execute(callback);
    }

    /**
     * 删除家人
     *
     * @param homeId   家id
     * @param peopleId 成员id
     * @param callback 回调
     */
    public void removeHomeUser(String homeId, String peopleId, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_REMOVE_HOME_USER)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("home_id", homeId)
                .params("d_id", peopleId)
                .execute(callback);
    }

    /**
     * 添加私密文章
     *
     * @param content  内容
     * @param callback 回调
     */
    public void addSecretText(String content, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_ADD_SECRET_TEXT)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("content", content)
                .execute(callback);
    }

    /**
     * 删除私密
     *
     * @param fileStrs 文件
     * @param callback 回调
     */
    public void deleteSecretFile(String fileStrs, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_DELETE_SECRET_FILE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("file", fileStrs)
                .execute(callback);
    }

    /**
     * 删除家相册中文件
     *
     * @param fileStrs 文件
     * @param callback 回调
     */
    public void deleteHomeFile(String fileStrs, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        String homeId = SpResourceUtil.getHomeId();
        post(Constants.URL_POST_HOME_FILE_DELETE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("file", fileStrs)
                .params("home_id", homeId)
                .execute(callback);
    }


    /**
     * 家文本删除
     *
     * @param fileStrs 文本
     * @param callback 回调
     */
    public void deleteHomeText(String fileStrs, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_HOME_TEXT_DELETE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("home_files_id", fileStrs)
                .execute(callback);
    }

    /**
     * 加相册关联家人
     *
     * @param file     文件
     * @param callback 回调
     */
    public void homeFileRelation(String userIds, String file, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        String homeId = SpResourceUtil.getHomeId();
        post(Constants.URL_POST_HOME_FILE_RELATION)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("user_id", userIds)
                .params("file", file)
                .params("home_id", homeId)
                .execute(callback);
    }

    /**
     * 获取家文件数量统计
     *
     * @param u_id     成员ID
     * @param callback 回调
     */
    public void getHomeFileTotal(String u_id, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        String homeId = SpResourceUtil.getHomeId();
        get(Constants.URL_GET_HOME_FILE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("id", homeId)
                .params("u_id", u_id)
                .execute(callback);
    }

    /**
     * 获取私密相册统计
     *
     * @param callback 回调
     */
    public void getSecretFileTotal(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_SECRET_FILE_TOTAL)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 设置存储量
     *
     * @param callback 回调
     */
    public void setStorage(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_SET_STORAGE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 合并家
     *
     * @param callback 回调
     */
    public void getMergeInherit(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_INHERIT_MERGE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 检测传承
     *
     * @param callback 回调
     */
    public void getInherit(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_INHERIT)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 选择传承人
     */
    public void getInheritList(String id, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_GET_INHERIT_DETAIL)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("id", id)
                .execute(callback);
    }

    /**
     * 生成密钥
     */
    public void getInheritSecret(String homeId, String userId, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_GET_INHERIT_SECRET)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("home_id", homeId)
                .params("inherit_user_id", userId)
                .execute(callback);
    }

    /**
     * 添加成员分享给某人
     *
     * @param id       成员id
     * @param callback 回调
     */
    public void startInvita(String id, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        String homeId = SpResourceUtil.getHomeId();
        post(Constants.URL_POST_START_INVITE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("d_id", id)
                .params("home_id", homeId)
                .execute(callback);
    }

    /**
     * 检测是否被分享
     *
     * @param callback 回调
     */
    public void userInvite(StringCallback callback) {
        String token = SpResourceUtil.getToken();
        get(Constants.URL_GET_USER_INVITE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .execute(callback);
    }

    /**
     * 接受邀请
     *
     * @param invite_id 多个用逗号隔开
     * @param callback  回调
     */
    public void endInvite(String invite_id, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_END_INVITE)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("invite_id", invite_id)
                .execute(callback);
    }

    /**
     * 接受传承
     *
     * @param secret   密钥
     * @param callback 回调
     */
    public void endInherit(String secret, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        post(Constants.URL_POST_END_INHERIT)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("secret", secret)
                .execute(callback);
    }

    /**
     * 私密相册转家
     *
     * @param files    转移文件
     * @param callback 回调
     */
    public void secretToHome(String files, StringCallback callback) {
        String token = SpResourceUtil.getToken();
        String homeId = SpResourceUtil.getHomeId();
        post(Constants.URL_POST_SECRET_TO_HOME)
                .tag(this)
                .connTimeOut(30000)
                .headers("token", token)
                .params("home_id", homeId)
                .params("file_id", files)
                .execute(callback);
    }

    /**
     * 下载图片/视频
     */
    public void download(String url, FileCallback callback) {
        get(url).execute(callback);
    }

}
